<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      Promise.resolve().then(() => {
        console.log('promise1');
        const timer2 = setTimeout(() => {
          console.log('timer2');
        }, 0);
      });

      const timer1 = setTimeout(() => {
        console.log('timer1');
        Promise.resolve().then(() => {
          console.log('promise2');
        });
      });

      console.log('start');

      /*
  微任务里面有一个同步任务promise1和宏任务timer2
  宏任务里面有一个同步任务timer1和微任务promise2
  同步任务start
   
  首先执行同步任务start.然后根据事件循环,先执行第一个微任务中的同步任务打印promise1.然后把微任务的中宏任务timer2放到宏任务队列.
  执行队列中的第一个宏任务,先执行同步timer1.然后执行宏任务中的微任务promise2.
  先打印promise2是因为微任务的优先级比宏任务优先级高.然后执行任务队列中的第二个宏任务timer2
  
  1 start
  2 promise1
  3 timer1
  4 promise2
  5 timer2
  */
    </script>
  </body>
</html>
